package com.webermagem.controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.hibernate.Session;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

import com.webermagem.DAO.PerfilDAO;
import com.webermagem.model.Perfil;
import com.webermagem.model.PerfilDataModel;
import com.webermagem.util.SessionManager;

@ManagedBean
@SessionScoped
public class PerfilController implements Serializable {

	private static final long serialVersionUID = 1L;

	private Perfil novoPerfil = new Perfil();
	private Perfil perfil;
	private Perfil perfilPesq = new Perfil();
	private List<Perfil> listaPerfis;
	private PerfilDataModel perfilModel;
	private PerfilDAO perfilDao = new PerfilDAO();

	// ADICIONA
	public void adicionarPerfil(ActionEvent actionEvent){
		
		RequestContext context = RequestContext.getCurrentInstance();
		context.addCallbackParam("user", novoPerfil);
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		perfilDao.save((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), novoPerfil);
		facesContext.addMessage(null, new FacesMessage("Sucesso", "Perfil adicionado com Sucesso!"));
		novoPerfil = new Perfil();
		
	}
	
    public void onRowSelect(SelectEvent event) {
    	perfil = (Perfil)(perfilModel.getRowData());
    }
    
	// ALTERA
	public void alterarPerfil(ActionEvent actionEvent){
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		perfilDao.update((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), perfil);
		FacesContext context = FacesContext.getCurrentInstance();  
		context.addMessage(null, new FacesMessage("Sucesso", "Perfil atualizado com Sucesso!"));
	}

	// EXCLUIR
	public void excluirPerfil(ActionEvent actionEvent){
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		perfilDao.remove((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), perfil);
		FacesContext context = FacesContext.getCurrentInstance();  
		context.addMessage(null, new FacesMessage("Sucesso", "Perfil excluido com Sucesso!"));
	}
	
	// CONSULTAR
	public void pesquisarPerfil(ActionEvent actionEvent){
		
		RequestContext context = RequestContext.getCurrentInstance();
		context.addCallbackParam("user", perfilPesq);
		
	}
	
	// GETS E SETTERS

	public PerfilDAO getPerfilDao() {
		return perfilDao;
	}

	public void setPerfilDao(PerfilDAO perfilDao) {
		this.perfilDao = perfilDao;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public PerfilDataModel getPerfilModel() {
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		if(perfilPesq == null || perfilPesq.getDescricao() == null) {
			
			listaPerfis = (List<Perfil>) perfilDao.listOrdenado((Session)SessionManager.getSessionAttribute(facesContext, "transacao"));
			
		} else {
			
			listaPerfis = perfilDao.listByDescricao((Session)SessionManager.getSessionAttribute(facesContext, "transacao"),perfilPesq.getDescricao());
			
		}
		
		perfilModel = new PerfilDataModel(listaPerfis);
		
		return perfilModel;
		
	}

	public void setPerfilModel(PerfilDataModel perfilModel) {
		this.perfilModel = perfilModel;
	}

	public List<Perfil> getListaPerfis() {
		return listaPerfis;
	}

	public void setListaPerfis(List<Perfil> listaPerfis) {
		this.listaPerfis = listaPerfis;
	}

	public Perfil getNovoPerfil() {
		return novoPerfil;
	}

	public void setNovoPerfil(Perfil novoPerfil) {
		this.novoPerfil = novoPerfil;
	}

	public Perfil getPerfilPesq() {
		return perfilPesq;
	}

	public void setPerfilPesq(Perfil perfilPesq) {
		this.perfilPesq = perfilPesq;
	}
	
}